/*
 * @Description: 类
 * @Autor: CDKEY
 * @Date: 2021-08-03 02:02:35
 */
#include <iostream>
using namespace std;

// 创建机器人类
class Robot {
   private:
    /**
     * 成员变量
     */
    char* m_name;
    char m_age;

    static int m_total;  //静态成员变量,所有实例化对象共享

   public:
    /** 构造函数
     * 默认构造函数,不写构造函数的情况下编译器默认添加
     */
    Robot();

    /**　析构函数　析构函数在类被销毁时调用
     */
    ~Robot() {
        // todo:
    }

    // 构造函数初始化类成员变量以下写法
    /** 1.只声明构造函数,类外初始化成员变量
     * 2.类内部初始化成员变量
     * 3.采用初始化列表
     * 4.部分成员变量初始化
     */
    Robot(char* name, int age);
    // Robot(char* name, int age){
    //   m_name=name;
    //   m_age=age;
    // }
    // Robot(char* name, int age):m_name(name),m_age(age){};
    // Robot(char* name, int age) : m_name(name) { m_age = age; }

    // 类成员函数
    void reload();  //类外定义函数
    // void reload(){ // 在类体中定义的成员函数会自动成为内联函数
    //   cout<< "robot is reload"<<endl;
    // }

    static int getTotal();  //声明静态成员函数
};

//初始化静态成员变量
int Robot::m_total = 0;

//定义静态成员函数
int Robot::getTotal() {
    return m_total;
}

// 类外构造函数初始化成员变量
Robot::Robot(char* name, int age) {
    // 使用this指针
    this->m_name = name;
    this->m_age = age;
}

// 类外定义函数
void Robot::reload() {
    cout << "robot is reload" << endl;
}

int main() {
    Robot bot1("mike", 18);  // 创建实例化对象bot1
    bot1.reload();           // 调用类成员函数

    Robot* bot2 = new Robot("join", 19);  // 在堆内存创建实例化对象
    bot2->reload();                       // 调用类成员函数

    system("pause");
}
